# RUN: yaml2obj %s -o %t1.o
# RUN: yaml2obj %s -o %t2.o

# RUN: printf "\x04" > %t.stats

# RUN: printf "%%s" "%t1.o" >> %t.stats
# RUN: printf "\x00" >> %t.stats
# RUN: printf "\x01\x00\x00\x00\x01\x00\x00\x00" >> %t.stats
# RUN: printf "\x11\x00\x00\x00\x02\x00\x00\x20" >> %t.stats
# RUN: printf "\x21\x00\x00\x00\x03\x00\x00\x40" >> %t.stats
# RUN: printf "\x01\x00\x00\x00\x04\x00\x00\x60" >> %t.stats
# RUN: printf "\x11\x00\x00\x00\x05\x00\x00\x80" >> %t.stats
# RUN: printf "\x21\x00\x00\x00\x06\x00\x00\xa0" >> %t.stats
# RUN: printf "\x00\x00\x00\x00\x00\x00\x00\x00" >> %t.stats

# RUN: printf "%%s" "%t2.o" >> %t.stats
# RUN: printf "\x00" >> %t.stats
# RUN: printf "\x21\x00\x00\x00\x07\x00\x00\x00" >> %t.stats
# RUN: printf "\x11\x00\x00\x00\x08\x00\x00\x20" >> %t.stats
# RUN: printf "\x01\x00\x00\x00\x09\x00\x00\x40" >> %t.stats
# RUN: printf "\x21\x00\x00\x00\x0b\x00\x00\x60" >> %t.stats
# RUN: printf "\x11\x00\x00\x00\x0c\x00\x00\x80" >> %t.stats
# RUN: printf "\x01\x00\x00\x00\x0e\x00\x00\xa0" >> %t.stats
# RUN: printf "\x00\x00\x00\x00\x00\x00\x00\x00" >> %t.stats

# RUN: sanstats %t.stats | FileCheck %s

# Test that if binaries are not in the original location then sanstats
# searches them next to the stats file.
# RUN: mkdir -p %t.dir
# RUN: mv -f %t1.o %t2.o %t.dir
# RUN: sanstats %t.stats | FileCheck %s --check-prefix=INVALID
# RUN: mv -f %t.stats %t.dir/copy.stats
# RUN: cd %t.dir && sanstats copy.stats | FileCheck %s

# INVALID: <invalid>
# CHECK-NOT: <invalid>
# CHECK: 0x0000000000000000 /tmp{{[/\\]}}f.c:1 f1 cfi-vcall 1
# CHECK: 0x0000000000000010 /tmp{{[/\\]}}f.c:2 f2 cfi-nvcall 2
# CHECK: 0x0000000000000020 /tmp{{[/\\]}}f.c:3 f3 cfi-derived-cast 3
# CHECK: 0x0000000000000000 /tmp{{[/\\]}}f.c:1 f1 cfi-unrelated-cast 4
# CHECK: 0x0000000000000010 /tmp{{[/\\]}}f.c:2 f2 cfi-icall 5
# CHECK: 0x0000000000000020 /tmp{{[/\\]}}f.c:3 f3 <unknown> 6

# CHECK: 0x0000000000000020 /tmp{{[/\\]}}f.c:3 f3 cfi-vcall 7
# CHECK: 0x0000000000000010 /tmp{{[/\\]}}f.c:2 f2 cfi-nvcall 8
# CHECK: 0x0000000000000000 /tmp{{[/\\]}}f.c:1 f1 cfi-derived-cast 9
# CHECK: 0x0000000000000020 /tmp{{[/\\]}}f.c:3 f3 cfi-unrelated-cast 11
# CHECK: 0x0000000000000010 /tmp{{[/\\]}}f.c:2 f2 cfi-icall 12
# CHECK: 0x0000000000000000 /tmp{{[/\\]}}f.c:1 f1 <unknown> 14

--- !ELF
FileHeader:      
  Class:           ELFCLASS64
  Data:            ELFDATA2LSB
  Type:            ET_REL
  Machine:         EM_X86_64
Sections:        
  - Name:            .text
    Type:            SHT_PROGBITS
    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
    AddressAlign:    0x0000000000000010
    Content:         554889E55DC3662E0F1F840000000000554889E55DC3662E0F1F840000000000554889E55DC3
  - Name:            .debug_str
    Type:            SHT_PROGBITS
    Flags:           [ SHF_MERGE, SHF_STRINGS ]
    AddressAlign:    0x0000000000000001
    Content:         636C616E672076657273696F6E20332E382E3020287472756E6B203235353339332920286C6C766D2F7472756E6B203235353734352900662E63002F746D7000663100663200663300
  - Name:            .debug_loc
    Type:            SHT_PROGBITS
    AddressAlign:    0x0000000000000001
    Content:         ''
  - Name:            .debug_abbrev
    Type:            SHT_PROGBITS
    AddressAlign:    0x0000000000000001
    Content:         011101250E1305030E10171B0E110112060000022E00110112064018030E3A0B3B0B3F19000000
  - Name:            .debug_info
    Type:            SHT_PROGBITS
    AddressAlign:    0x0000000000000001
    Content:         660000000400000000000801000000000C0000000000000000000000000000000000000000002600000002000000000000000006000000015600000000010102000000000000000006000000015600000000010202000000000000000006000000015600000000010300
  - Name:            .rela.debug_info
    Type:            SHT_RELA
    Link:            .symtab
    AddressAlign:    0x0000000000000008
    Info:            .debug_info
    Relocations:     
      - Offset:          0x0000000000000006
        Type:            R_X86_64_32
      - Offset:          0x000000000000000C
        Type:            R_X86_64_32
      - Offset:          0x0000000000000012
        Type:            R_X86_64_32
        Addend:          55
      - Offset:          0x0000000000000016
        Type:            R_X86_64_32
      - Offset:          0x000000000000001A
        Type:            R_X86_64_32
        Addend:          59
      - Offset:          0x000000000000001E
        Type:            R_X86_64_64
      - Offset:          0x000000000000002B
        Type:            R_X86_64_64
      - Offset:          0x0000000000000039
        Type:            R_X86_64_32
        Addend:          64
      - Offset:          0x0000000000000040
        Type:            R_X86_64_64
        Addend:          16
      - Offset:          0x000000000000004E
        Type:            R_X86_64_32
        Addend:          67
      - Offset:          0x0000000000000055
        Type:            R_X86_64_64
        Addend:          32
      - Offset:          0x0000000000000063
        Type:            R_X86_64_32
        Addend:          70
  - Name:            .debug_ranges
    Type:            SHT_PROGBITS
    AddressAlign:    0x0000000000000001
    Content:         ''
  - Name:            .debug_pubnames
    Type:            SHT_PROGBITS
    AddressAlign:    0x0000000000000001
    Content:         230000000200000000006A0000002A0000006631003F0000006632005400000066330000000000
  - Name:            .rela.debug_pubnames
    Type:            SHT_RELA
    Link:            .symtab
    AddressAlign:    0x0000000000000008
    Info:            .debug_pubnames
    Relocations:     
      - Offset:          0x0000000000000006
        Type:            R_X86_64_32
  - Name:            .comment
    Type:            SHT_PROGBITS
    Flags:           [ SHF_MERGE, SHF_STRINGS ]
    AddressAlign:    0x0000000000000001
    Content:         00636C616E672076657273696F6E20332E382E3020287472756E6B203235353339332920286C6C766D2F7472756E6B203235353734352900
  - Name:            .note.GNU-stack
    Type:            SHT_PROGBITS
    AddressAlign:    0x0000000000000001
    Content:         ''
  - Name:            .eh_frame
    Type:            SHT_X86_64_UNWIND
    Flags:           [ SHF_ALLOC ]
    AddressAlign:    0x0000000000000008
    Content:         1400000000000000017A5200017810011B0C070890010000180000001C000000000000000600000000410E108602430D060000001800000038000000000000000600000000410E108602430D060000001C00000054000000000000000600000000410E108602430D0600000000000000
  - Name:            .rela.eh_frame
    Type:            SHT_RELA
    Link:            .symtab
    AddressAlign:    0x0000000000000008
    Info:            .eh_frame
    Relocations:     
      - Offset:          0x0000000000000020
        Type:            R_X86_64_PC32
      - Offset:          0x000000000000003C
        Type:            R_X86_64_PC32
        Addend:          16
      - Offset:          0x0000000000000058
        Type:            R_X86_64_PC32
        Addend:          32
  - Name:            .debug_line
    Type:            SHT_PROGBITS
    AddressAlign:    0x0000000000000001
    Content:         4300000002001A0000000101FB0E0D00010101010000000100000100662E630000000000000902000000000000000001050C0A4A0500BB050C0A4A0500BB050C0A4A0202000101
  - Name:            .rela.debug_line
    Type:            SHT_RELA
    Link:            .symtab
    AddressAlign:    0x0000000000000008
    Info:            .debug_line
    Relocations:     
      - Offset:          0x0000000000000027
        Type:            R_X86_64_64
Symbols:
  - Name:            f.c
    Type:            STT_FILE
  - Type:            STT_SECTION
    Section:         .text
  - Type:            STT_SECTION
    Section:         .debug_str
  - Type:            STT_SECTION
    Section:         .debug_abbrev
  - Type:            STT_SECTION
    Section:         .debug_info
  - Type:            STT_SECTION
    Section:         .debug_line
  - Name:            f1
    Type:            STT_FUNC
    Section:         .text
    Size:            0x0000000000000006
    Binding:         STB_GLOBAL
  - Name:            f2
    Type:            STT_FUNC
    Section:         .text
    Value:           0x0000000000000010
    Size:            0x0000000000000006
    Binding:         STB_GLOBAL
  - Name:            f3
    Type:            STT_FUNC
    Section:         .text
    Value:           0x0000000000000020
    Size:            0x0000000000000006
    Binding:         STB_GLOBAL
...
